home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2005 October / PCWOCT05.iso / Software / FromTheMag / XAMPP 1.4.14 / xampp-win32-1.4.14-installer.exe / xampp / mysql / scripts / make_win_src_distribution < prev    next >
Text File  |  2005-04-01  |  10KB  |  521 lines

  1. #!/bin/sh
  2.  
  3. #
  4. # Script to create a Windows src package
  5. #
  6.  
  7. version=4.1.11
  8. export version
  9. CP="cp -p"
  10.  
  11. DEBUG=0
  12. SILENT=0
  13. SUFFIX=""
  14. DIRNAME=""
  15. OUTTAR="0"
  16. OUTZIP="0"
  17.  
  18. #
  19. # An "abort" function taking a variable number of strings (one per line)
  20. #
  21.  
  22. abort()
  23. {
  24.   for line
  25.   do
  26.     echo "$line"
  27.   done
  28.   exit 1
  29. }
  30.  
  31.  
  32. #
  33. # This script must run from MySQL top directory
  34. #
  35.  
  36. if [ ! -f scripts/make_win_src_distribution ]; then
  37.   abort "ERROR : You must run this script from the MySQL top-level directory"
  38. fi
  39. SOURCE=`pwd`
  40.  
  41. #
  42. # Check for source compilation/configuration
  43. #
  44.  
  45. if [ ! -f sql/sql_yacc.cc ]; then
  46.   abort "ERROR : Sorry, you must run this script after the complete build," \
  47.         "        hope you know what you are trying to do !!"
  48. fi
  49.  
  50. #
  51. # Debug print of the status
  52. #
  53.  
  54. print_debug() 
  55. {
  56.   for statement 
  57.   do
  58.     if [ "$DEBUG" = "1" ] ; then
  59.       echo $statement
  60.     fi
  61.   done
  62. }
  63.  
  64. #
  65. # Usage of the script
  66. #
  67.  
  68. show_usage() 
  69. {
  70.   echo "MySQL utility script to create a Windows src package, and it takes"
  71.   echo "the following arguments:"
  72.   echo ""
  73.   echo "  --debug   Debug, without creating the package"
  74.   echo "  --tmp     Specify the temporary location"
  75.   echo "  --suffix  Suffix name for the package"
  76.   echo "  --dirname Directory name to copy files (intermediate)"
  77.   echo "  --silent  Do not list verbosely files processed"
  78.   echo "  --tar     Create tar.gz package"
  79.   echo "  --zip     Create zip package"
  80.   echo "  --help    Show this help message"
  81.  
  82.   exit 0
  83. }
  84.  
  85. #
  86. # Parse the input arguments
  87. #
  88.  
  89. parse_arguments() {
  90.   for arg do
  91.     case "$arg" in
  92.       --add-tar)  ADDTAR=1 ;;
  93.       --debug)    DEBUG=1;;
  94.       --tmp=*)    TMP=`echo "$arg" | sed -e "s;--tmp=;;"` ;;
  95.       --suffix=*) SUFFIX=`echo "$arg" | sed -e "s;--suffix=;;"` ;;
  96.       --dirname=*) DIRNAME=`echo "$arg" | sed -e "s;--dirname=;;"` ;;
  97.       --silent)   SILENT=1 ;;
  98.       --tar)      OUTTAR=1 ;;
  99.       --zip)      OUTZIP=1 ;;
  100.       --help)     show_usage ;;
  101.       *)          abort "Unknown argument '$arg'"
  102.       ;;
  103.     esac
  104.   done
  105. }
  106.  
  107. parse_arguments "$@"
  108.  
  109. #
  110. # Assign the tmp directory if it was set from the environment variables
  111. #
  112.  
  113. for i in $TMP $TMPDIR $TEMPDIR $TEMP /tmp
  114. do
  115.   if [ "$i" ]; then
  116.     print_debug "Setting TMP to '$i'"
  117.     TMP=$i
  118.     break
  119.   fi
  120. done
  121.  
  122.  
  123. #
  124. # Convert argument file from unix to DOS text
  125. #
  126.  
  127. unix_to_dos()
  128. {
  129.   for arg do
  130.     print_debug "Replacing LF -> CRLF from '$arg'"
  131.  
  132.     awk '{sub(/$/,"\r");print}' < $arg   > $arg.tmp
  133.     rm -f $arg
  134.     mv $arg.tmp $arg
  135.   done
  136. }
  137.  
  138.  
  139. #
  140. # Create a tmp dest directory to copy files
  141. #
  142.  
  143. BASE=$TMP/my_win_dist$SUFFIX
  144.  
  145. if [ -d $BASE ] ; then
  146.   print_debug "Destination directory '$BASE' already exists, deleting it"
  147.   rm -r -f $BASE
  148. fi
  149.  
  150. $CP -r $SOURCE/VC++Files $BASE
  151. # This includes an implicit 'mkdir $BASE' !
  152.  
  153. #
  154. # Process version tags in InstallShield files
  155. #
  156.  
  157. vreplace()
  158. {
  159.   for arg do
  160.     unix_to_dos $arg
  161.     cat $arg | sed -e 's!@''VERSION''@!4.1.11!' > $arg.tmp
  162.     rm -f $arg
  163.     mv $arg.tmp $arg
  164.   done
  165. }
  166.  
  167. if test -d $BASE/InstallShield
  168. then
  169.   for d in 4.1.XX-gpl 4.1.XX-pro 4.1.XX-classic
  170.   do
  171.     cd $BASE/InstallShield/$d/String\ Tables/0009-English
  172.     vreplace value.shl
  173.     cd ../../Setup\ Files/Compressed\ Files/Language\ Independent/OS\ Independent
  174.     vreplace infolist.txt
  175.   done
  176. fi
  177.  
  178. #
  179. # Move all error message files to root directory
  180. #
  181.  
  182. $CP -r $SOURCE/sql/share $BASE/
  183. rm -r -f "$BASE/share/Makefile"
  184. rm -r -f "$BASE/share/Makefile.in"
  185. rm -r -f "$BASE/share/Makefile.am"
  186.  
  187. mkdir $BASE/Docs $BASE/extra $BASE/include
  188.  
  189. #
  190. # Copy directory files
  191. #
  192.  
  193. copy_dir_files()
  194. {
  195.   for arg do
  196.     print_debug "Copying files from directory '$arg'"
  197.     cd $SOURCE/$arg
  198.     if [ ! -d $BASE/$arg ]; then
  199.        print_debug "Creating directory '$arg'"
  200.        mkdir $BASE/$arg
  201.      fi
  202.     for i in *.c *.cpp *.h *.ih *.i *.ic *.asm *.def *.hpp *.dsp \
  203.              README INSTALL* LICENSE *.inc *.test *.result \
  204.          *.pem Moscow_leap des_key_file *.dat *.000001 \
  205.          *.require *.opt
  206.  
  207.     do
  208.       if [ -f $i ]
  209.       then
  210.         $CP $SOURCE/$arg/$i $BASE/$arg/$i
  211.       fi
  212.     done
  213.     for i in *.cc
  214.     do
  215.       if [ -f $i ]
  216.       then
  217.         i=`echo $i | sed 's/.cc$//g'`
  218.         $CP $SOURCE/$arg/$i.cc $BASE/$arg/$i.cpp
  219.       fi
  220.     done
  221.   done
  222. }
  223.  
  224. #
  225. # Copy directory contents recursively
  226. #
  227.  
  228. copy_dir_dirs() {
  229.  
  230.   for arg do
  231.  
  232.     cd $SOURCE
  233.     (
  234.     find $arg -type d \
  235.               -and -not -path \*SCCS\* \
  236.               -and -not -path \*.deps\* \
  237.               -and -not -path \*autom4te.cache -print
  238.     )|(
  239.       while read v
  240.       do
  241.         copy_dir_files $v
  242.       done
  243.     )
  244.  
  245.   done
  246. }
  247.  
  248. #
  249. # Input directories to be copied
  250. #
  251.  
  252. for i in client dbug extra heap include isam \
  253.          libmysql libmysqld merge myisam \
  254.          myisammrg mysys regex sql strings sql-common sql/examples \
  255.          tools vio zlib
  256. do
  257.   copy_dir_files $i
  258. done
  259.  
  260. #
  261. # Create project files for ndb
  262. #
  263. make -C $SOURCE/ndb windoze
  264.  
  265. #
  266. # Input directories to be copied recursively
  267. #
  268.  
  269. for i in bdb innobase ndb
  270. do
  271.   copy_dir_dirs $i
  272. done
  273.  
  274. #
  275. # Create dummy innobase configure header
  276. #
  277.  
  278. if [ -f $BASE/innobase/ib_config.h ]; then
  279.   rm -f $BASE/innobase/ib_config.h
  280. fi
  281. touch $BASE/innobase/ib_config.h
  282.  
  283.  
  284. #
  285. # Copy miscellaneous files
  286. #
  287.  
  288. cd $SOURCE
  289. for i in COPYING ChangeLog README EXCEPTIONS-CLIENT\
  290.          INSTALL-SOURCE INSTALL-WIN \
  291.          INSTALL-WIN-SOURCE \
  292.          Docs/manual_toc.html  Docs/manual.html \
  293.          Docs/manual.txt Docs/mysqld_error.txt \
  294.          Docs/INSTALL-BINARY Docs/internals.texi
  295. do
  296.   print_debug "Copying file '$i'"
  297.   if [ -f $i ]
  298.   then
  299.     $CP $i $BASE/$i
  300.   fi
  301. done
  302.  
  303. #
  304. # support files
  305. #
  306. mkdir $BASE/support-files
  307.  
  308. # Rename the cnf files to <file>.ini
  309. for i in support-files/*.cnf
  310. do
  311.   i=`echo $i | sed 's/.cnf$//g'`
  312.   cp $i.cnf $BASE/$i.ini
  313. done
  314.  
  315. #
  316. # Raw dirs from source tree
  317. #
  318.  
  319. for i in scripts sql-bench mysql-test SSL tests
  320. do
  321.   print_debug "Copying directory '$i'"
  322.   if [ -d $i ]
  323.   then
  324.     if [ -d $BASE/$i ]
  325.     then
  326.       $CP -R $i $BASE
  327.     else
  328.       $CP -R $i $BASE/$i
  329.     fi
  330.   fi
  331. done
  332.  
  333. #
  334. # Fix some windows files to avoid compiler warnings
  335. #
  336.  
  337. ./extra/replace std:: "" < $BASE/sql/sql_yacc.cpp | sed '/^ *switch (yytype)$/ { N; /\n *{$/ { N; /\n *default:$/ { N; /\n *break;$/ { N; /\n *}$/ d; };};};} ' > $BASE/sql/sql_yacc.cpp-new
  338. mv $BASE/sql/sql_yacc.cpp-new $BASE/sql/sql_yacc.cpp
  339.  
  340. #
  341. # Search the tree for plain text files and adapt the line end marker
  342. #
  343. find $BASE \( -name "*.dsp" -o -name "*.dsw" -o -name "*.cnf" -o -name "*.ini" \
  344.            -o -name COPYING -o -name ChangeLog -o -name EXCEPTIONS-CLIENT -o -name "INSTALL*" -o -name LICENSE -o -name "README*" \) -type f -print \
  345. | while read v
  346.   do
  347.     unix_to_dos $v
  348.   done
  349. # File extension '.txt' matches too many other files, error messages etc.
  350. unix_to_dos $BASE/Docs/*.txt 
  351.  
  352. mv $BASE/README $BASE/README.txt
  353.  
  354. #
  355. # Clean up if we did this from a bk tree
  356. #
  357.  
  358. if [ -d $BASE/SSL/SCCS ]
  359. then
  360.   find $BASE/ -type d -name SCCS -printf " \"%p\"" | xargs rm -r -f
  361. fi
  362.  
  363. #
  364. # Initialize the initial data directory
  365. #
  366.  
  367. if [ -f scripts/mysql_install_db ]; then
  368.   print_debug "Initializing the 'data' directory"
  369.   scripts/mysql_install_db --no-defaults --windows --datadir=$BASE/data
  370.   if test "$?" = 1
  371.   then
  372.     exit 1;
  373.   fi
  374. fi
  375.  
  376. #
  377. # Specify the distribution package name and copy it
  378. #
  379.  
  380. if test -z $DIRNAME
  381. then
  382.   NEW_DIR_NAME=mysql-$version$SUFFIX
  383. else
  384.   NEW_DIR_NAME=$DIRNAME
  385. fi
  386. NEW_NAME=$NEW_DIR_NAME-win-src
  387.  
  388. BASE2=$TMP/$NEW_DIR_NAME
  389. rm -r -f $BASE2
  390. mv $BASE $BASE2
  391. BASE=$BASE2
  392.  
  393. #
  394. # If debugging, don't create a zip/tar/gz
  395. #
  396.  
  397. if [ "$DEBUG" = "1" ] ; then
  398.   echo "Please check the distribution files from $BASE"
  399.   echo "Exiting (without creating the package).."
  400.   exit
  401. fi
  402.  
  403. #
  404. # This is needed to prefere gnu tar instead of tar because tar can't
  405. # always handle long filenames
  406. #
  407.  
  408. PATH_DIRS=`echo $PATH | sed -e 's/^:/. /' -e 's/:$/ ./' -e 's/::/ . /g' -e 's/:/ /g' `
  409. which_1 ()
  410. {
  411.   for cmd
  412.   do
  413.     for d in $PATH_DIRS
  414.     do
  415.       for file in $d/$cmd
  416.       do
  417.     if test -x $file -a ! -d $file
  418.     then
  419.       echo $file
  420.       exit 0
  421.     fi
  422.       done
  423.     done
  424.   done
  425.   exit 1
  426. }
  427.  
  428. #
  429. # Create the result zip/tar file
  430. #
  431.  
  432. if [ "$OUTTAR" = "0" ]; then
  433.   if [ "$OUTZIP" = "0" ]; then
  434.     OUTZIP=1
  435.   fi
  436. fi
  437.  
  438. set_tarzip_options()
  439. {
  440.   for arg
  441.   do
  442.     if [ "$arg" = "tar" ]; then
  443.       ZIPFILE1=gnutar
  444.       ZIPFILE2=gtar
  445.       OPT=cvf
  446.       EXT=".tar"
  447.       NEED_COMPRESS=1
  448.       if [ "$SILENT" = "1" ] ; then
  449.         OPT=cf
  450.       fi
  451.     else
  452.       ZIPFILE1=zip
  453.       ZIPFILE2=""
  454.       OPT="-r"
  455.       EXT=".zip"
  456.       NEED_COMPRESS=0
  457.       if [ "$SILENT" = "1" ] ; then
  458.         OPT="$OPT -q"
  459.       fi
  460.     fi
  461.   done
  462. }
  463.  
  464.  
  465. #
  466. # Create the archive
  467. #
  468. create_archive()
  469. {
  470.  
  471.   print_debug "Using $tar to create archive"
  472.  
  473.   cd $TMP
  474.  
  475.   rm -f $SOURCE/$NEW_NAME$EXT
  476.   $tar $OPT $SOURCE/$NEW_NAME$EXT $NEW_DIR_NAME
  477.   cd $SOURCE
  478.  
  479.   if [ "$NEED_COMPRESS" = "1" ]
  480.   then
  481.     print_debug "Compressing archive"
  482.     gzip -9 $NEW_NAME$EXT
  483.     EXT="$EXT.gz"
  484.   fi
  485.  
  486.   if [ "$SILENT" = "0" ] ; then
  487.     echo "$NEW_NAME$EXT created successfully !!"
  488.   fi
  489. }
  490.  
  491. if [ "$OUTTAR" = "1" ]; then
  492.   set_tarzip_options 'tar'
  493.  
  494.   tar=`which_1 $ZIPFILE1 $ZIPFILE2`
  495.   if test "$?" = "1" -o "$tar" = ""
  496.   then
  497.     print_debug "Search failed for '$ZIPFILE1', '$ZIPFILE2', using default 'tar'"
  498.     tar=tar
  499.     set_tarzip_options 'tar'
  500.   fi
  501.   
  502.   create_archive 
  503. fi
  504.  
  505. if [ "$OUTZIP" = "1" ]; then
  506.   set_tarzip_options 'zip'
  507.  
  508.   tar=`which_1 $ZIPFILE1 $ZIPFILE2`
  509.   if test "$?" = "1" -o "$tar" = ""
  510.   then
  511.     echo "Search failed for '$ZIPFILE1', '$ZIPFILE2', cannot create zip!"
  512.   fi
  513.  
  514.   create_archive
  515. fi
  516.  
  517. print_debug "Removing temporary directory"
  518. rm -r -f $BASE
  519.  
  520. # End of script
  521.